package com.icinfo.cloud.provider.punish.common.datareport.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;
import org.springframework.util.ObjectUtils;

/**
 * 描述：证件类型数据上报映射枚举
 *
 * @author xiangyuyu
 * @date 2022-06-14 15:17
 */
@AllArgsConstructor
public enum CertTypeDataReportEnum {
    /**
     * 证件类型枚举
     */
    CBR("TWJM", "台湾居民通行证","511","台湾居民来往大陆通行证港"),
    WZJCSFZ("WZJCSFZ", "武装警察身份证","115","中国人民武装警察部队警官证"),
    JRSFZ("JRSFZ", "军人身份证","114","中国人民解放军军官证"),
    HKB("HKB", "户口本","113","户口簿"),
    SFZ("SFZ", "身份证","111","居民身份证"),
    GAJM("GAJM", "港澳居民通行证","516","澳居民来往内地通行证"),
    HZ("HZ", "护照","414","普通护照"),
    WGRSFZ("WGRSFZ", "外国人居留身份证","154","居住证");

    /*
        001	统一社会信用代码
        099	其他法人或其他组织有效证件号码
        111	居民身份证
        112	临时居民身份证
        113	户口簿
        114	中国人民解放军军官证
        115	中国人民武装警察部队警官证
        117	出生医学证明
        118	中国人民解放军士兵证
        119	中国人民武装警察部队士兵证
        120	中国人民解放军文职人员证
        122	中国人民武装警察部队文职人员证
        154	居住证
        411	外交护照
        412	公务护照
        413	公务普通护照
        414	普通护照
        415	旅行证
        511	台湾居民来往大陆通行证港
        516	澳居民来往内地通行证
     */

    /**
     * 编码
     */
    @Getter
    private String code;

    /**
     * 描述
     */
    @Getter
    private String des;

    /**
     * 数据上报映射编码
     */
    @Getter
    private String reflectCode;

    /**
     * 数据上报映射描述
     */
    @Getter
    private String reflectDes;


    /**
     * 描述：根据code获取value
     *
     * @param code 编码
     * @return 描述内容
     * @author xiangyuyu
     * @date 2022-02-22 10:43
     */
    public static String getValueByCode(String code) {
        if (ObjectUtils.isEmpty(code)) {
            return null;
        }
        for (CertTypeDataReportEnum e : CertTypeDataReportEnum.values()) {
            if (code.equals(e.getCode())) {
                return e.getDes();
            }
        }
        return code;
    }

    /**
     * 描述：根据code获取映射code
     *
     * @param code 编码
     * @return 映射code
     * @author xiangyuyu
     * @date 2022-06-14 15:26
     */
    public static String getReflectCodeByCode(String code) {
        if (ObjectUtils.isEmpty(code)) {
            return null;
        }
        for (CertTypeDataReportEnum e : CertTypeDataReportEnum.values()) {
            if (code.equals(e.getCode())) {
                return e.getReflectCode();
            }
        }
        //其他返回缺省"居住证"
        return CertTypeDataReportEnum.WGRSFZ.getReflectCode();
    }

    /**
     * 描述：校验code是否是合法枚举
     *
     * @param code 枚举code
     * @return boolean 是否合法枚举（true-是/false-否）
     * @author xiangyuyu
     * @date 2022-02-22 10:42
     */
    public static boolean isLegalEnumCode(String code) {
        boolean flag = false;
        for (CertTypeDataReportEnum e : CertTypeDataReportEnum.values()) {
            if (e.getCode().equalsIgnoreCase(code)) {
                flag = true;
                break;
            }
        }
        return flag;
    }


}
